package Day21.面向对象测试;

/**
 * 懒汉式
 * 单例模式:
 *  1.构造方法私有化:不允许在类的外部直接创建类的对象
 *  2.在类的内部通过一个对外的方法,在该方法中创建类的实例,并控制该类的对象只能被创建一次
 *  3.将对象返回(提供给外部使用)
 */
public class Singleton {

    //构造方法私有化,外部不能使用构造方法
    private Singleton(){}

    //等于null表示该变量没有任何值，是空的
    private static Singleton instance = null;//引用类型的默认值为null
    /**
     * 获得当前类对象的方法
     *  synchronized:同步锁
     * @return
     */
    public synchronized static Singleton getInstance(){
        //判断instance属性是否有值，如果有值则直接返回该对象，如果没值则创建对象
        if(instance == null){
            try {
                Thread.sleep(10);//线程休眠
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //创建类的实例
            instance = new Singleton();
        }
        return instance;
    }

}
